package main

import "fmt"

func main() {
	var slice []string // 没有分配内存
	fmt.Println(slice)
	fmt.Println(slice == nil)
	//	没有初始化的切片 == nil，只能和nil做比较操作
	var b = []bool{false, true}
	fmt.Println(b)
	fmt.Println(b == nil)
	//	第二种 初始化方式(长度和容量)
	var slice4 = make([]int, 3, 10)
	fmt.Println("slice4", slice4)
	fmt.Println(slice4 == nil)

	//引用类型,slice\map\channel 都是引用类型，数据传递是引用传递
	var slice5 = []int{1, 2, 3}
	slice6 := slice5
	slice6[0] = 3
	fmt.Println(slice5, slice6)

	//切片的长度就是他所包含的元素个数
	//	切片的容量是它的第一个元素到其底层数组的元素末尾的个数
	a := [8]int{0, 1, 2, 3, 4, 5, 6, 7}
	fmt.Printf("%T\n", a)
	b2 := a[3:6]
	fmt.Printf("%T ,长度%d, 容量%d\n", b2, len(b2), cap(b2))
	fmt.Println(b2)
	c := b2[:cap(b2)]
	fmt.Printf("%T ,长度%d, 容量%d", c, len(c), cap(c), c)


    // 合并切片
	
	var slice11 = make([]int,0)
	fmt.Println(slice11)
	for i := 0 ; i<10; i++ {
	  slice11 = append(slice11, i)
	}
	fmt.Println(slice11)
	
	var slice12 = []int{3,2,1}
	slice11 = append(slice11,slice12...)
	fmt.Println(slice11)
	
	slice1 = append(slice11,12,23)
	fmt.Println(slice11)
	//slice 删除(下标截取之后再合并)
	var slice13 = []int{9,5,45,345,64,345}
	slice13 = append(slice13[:1], slice13[3:4]...)
	fmt.Println(slice13)
}
